{
  // useState它接收一个任意类型的数据，返回一个数组。
  //   数组的第一个元素的类型与入参一致； 
  //   数组的第二个元素是一个函数
  //     这个函数的入参类型和返回值类型与useState的入参一致
  //   (val: T) => T
  

  // 测试代码 - 鼠标悬停查看效果
  // const [num, setNum] = useState(0)
  // const [str, setStr] = useState('ab')

  function useState<T>(value: T): [T, (val: T) => T] {
      const setValue = (val: T): T => {
        return val
      }

      return [value, setValue]
  }

  const [str, setStr] = useState('123')

  const [num, setNum] = useState(123)
}